package com.notifier.handler;

import com.notifier.event.ErrorEvent;
import com.notifier.filter.ErrorFilterChain;
import com.notifier.notifier.NotifierManager;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

/**
 * 错误事件处理器
 * 职责：接收错误事件，协调过滤器链和通知器
 *
 * @author Amadeus
 * @date 2025/10/14
 */
@Slf4j
@Component
public class ErrorEventHandler {
    
    @Autowired
    private ErrorFilterChain filterChain;
    
    @Autowired
    private NotifierManager notifierManager;
    
    /**
     * 处理错误事件
     * 使用 @Async 异步处理，避免阻塞主线程
     */
    @Async
    @EventListener
    public void handleErrorEvent(ErrorEvent event) {
        try {
            log.debug("接收到错误事件：{}，应用：{}", 
                event.getErrorType(), 
                event.getApplicationName());
            
            // 1. 通过过滤器链
            boolean shouldFilter = filterChain.doFilter(event);
            if (shouldFilter) {
                log.debug("错误事件被过滤器链过滤");
                return;
            }
            
            // 2. 发送通知
            notifierManager.notifyAll(event);
            
            log.debug("错误事件处理完成");
        } catch (Exception e) {
            log.warn("处理错误事件异常", e);
        }
    }
}

